<script>
    // 实现reduce方法
    Array.prototype.mlreduce = function (fn, initVal) {
        // 给prev传递了初始化参数，也就是说有初始化参数
        let hasInitVal = initVal !== undefined
        let value = hasInitVal ? initVal : this[0]
        for (let i = hasInitVal ? 0 : 1, len = this.length; i < len; i++) {
            value = fn(value, this[i], i, this)
        }
        return value;
    };
    var arr = [1, 2, 3];
    // reduce是个累加器
    // 第1次：prev:1   next：2
    // 第2次：prev:3   next:3
    // 第3次：prev:6   next:无
    // prev表示之前累加和  next表示下一项
    // 在调用reduce时可以给prev传递初始化参数
    var sum = arr.mlreduce(function (prev, next, index, arr) {
        // console.log("prev", prev);
        // console.log("next", next);
        return prev + next;
    }, 10);
    console.log(sum);
</script>